Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


docs/clean_md.py HEAD (4fc8e03d) Text, 3.77 KB

T8b949e#!/usr/bin/env python3

Tff7b72import T7ee787os
Tff7b72import T7ee787sys
Tff7b72import T7ee787re
Tff7b72from T7ee787pathlib Tff7b72import Te6edf3Path

Te6edf3LINE_START_PATTERNS Tff7b72= Tb4b4b4[
Ta5d6ffrTa5d6ff'Ta5d6ff<aTa5d6ff\Ta5d6ffs+Ta5d6ff'Tb4b4b4, T8b949e# HTML anchor tags: <a id="..."></a>
Ta5d6ffrTa5d6ff'Tffea00\\Tffea00\\Ta5d6ffnewpageTa5d6ff'Tb4b4b4, T8b949e# LaTeX newpage commands
Tb4b4b4]

Te6edf3LINE_ANY_PATTERNS Tff7b72= Tb4b4b4[
T8b949e# r'<br/>',
T8b949e# r'<div[^>]*>',
T8b949e# r'</div>',
Tb4b4b4]

Tff7b72def Td2a8ffcompile_patternsTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3start_patterns Tff7b72= Tb4b4b4[Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Te6edf3pTb4b4b4) Tff7b72for Te6edf3p Tff7b72in Te6edf3LINE_START_PATTERNSTb4b4b4]
Te6edf3any_patterns Tff7b72= Tb4b4b4[Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Te6edf3pTb4b4b4) Tff7b72for Te6edf3p Tff7b72in Te6edf3LINE_ANY_PATTERNSTb4b4b4]
Tff7b72return Te6edf3start_patternsTb4b4b4, Te6edf3any_patterns


Tff7b72def Td2a8ffshould_remove_lineTb4b4b4(Te6edf3lineTb4b4b4, Te6edf3start_patternsTb4b4b4, Te6edf3any_patternsTb4b4b4)Tb4b4b4:
Te6edf3stripped Tff7b72= Te6edf3lineTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3pattern Tff7b72in Te6edf3start_patternsTb4b4b4:
Tff7b72if Te6edf3patternTff7b72.Td2a8ffmatchTb4b4b4(Te6edf3strippedTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72True
Tff7b72for Te6edf3pattern Tff7b72in Te6edf3any_patternsTb4b4b4:
Tff7b72if Te6edf3patternTff7b72.Td2a8ffsearchTb4b4b4(Te6edf3strippedTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72True
Tff7b72return Tff7b72False


Tff7b72def Td2a8ffclean_markdown_contentTb4b4b4(Te6edf3contentTb4b4b4, Te6edf3start_patternsTb4b4b4, Te6edf3any_patternsTb4b4b4, Te6edf3api_refTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3content Tff7b72= Te6edf3contentTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff**Tffea00\nTa5d6ff : Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff**Tffea00\nTa5d6ff Ta5d6ff"Tb4b4b4)
Te6edf3content Tff7b72= Te6edf3contentTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff* **Ta5d6ff"Tb4b4b4, Ta5d6ff"Tffea00\nTffea00\nTa5d6ff* **Ta5d6ff"Tb4b4b4)
Te6edf3content Tff7b72= Te6edf3contentTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Tffea00\nTffea00\nTffea00\nTa5d6ff"Tb4b4b4, Ta5d6ff"Tffea00\nTffea00\nTa5d6ff"Tb4b4b4)
Te6edf3lines Tff7b72= Te6edf3contentTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff'Tffea00\nTa5d6ff'Tb4b4b4)
Te6edf3result Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3skip_next_empty Tff7b72= Tff7b72False
Tff7b72for Te6edf3iTb4b4b4, Te6edf3line Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3linesTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3should_remove_lineTb4b4b4(Te6edf3lineTb4b4b4, Te6edf3start_patternsTb4b4b4, Te6edf3any_patternsTb4b4b4)Tb4b4b4:
Te6edf3skip_next_empty Tff7b72= Tff7b72True
Tff7b72continue
Tff7b72if Te6edf3skip_next_emptyTb4b4b4:
Tff7b72if Te6edf3lineTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff'Ta5d6ff'Tb4b4b4: Tff7b72continue
Tff7b72elseTb4b4b4: Te6edf3skip_next_empty Tff7b72= Tff7b72False
Tff7b72if Te6edf3api_refTb4b4b4:
Tff7b72if Te6edf3lineTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ff### Ta5d6ff"Tb4b4b4) Tff7b72or Te6edf3lineTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ff#### Ta5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3line Tff7b72= Te6edf3lineTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff*Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3line Tff7b72= Te6edf3lineTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Tffea00\\Ta5d6ff_Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff_Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3lineTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ff### Ta5d6ff"Tb4b4b4)Tb4b4b4: Te6edf3line Tff7b72= Te6edf3lineTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff### Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff### `Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3lineTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ff#### Ta5d6ff"Tb4b4b4)Tb4b4b4: Te6edf3line Tff7b72= Te6edf3lineTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff#### Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff#### `Ta5d6ff"Tb4b4b4)
Te6edf3line Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3lineTffd700}Ta5d6ff`Ta5d6ff"

Te6edf3line Tff7b72= Te6edf3lineTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff<br/>Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)

Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Te6edf3lineTb4b4b4)
T8b949e# Remove trailing empty lines from end of file
Tff7b72while Te6edf3result Tff7b72and Te6edf3resultTb4b4b4[Tff7b72-T79c0ff1Tb4b4b4]Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff'Ta5d6ff'Tb4b4b4:
Te6edf3resultTff7b72.Td2a8ffpopTb4b4b4(Tb4b4b4)
Tff7b72return Ta5d6ff'Tffea00\nTa5d6ff'Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3resultTb4b4b4)


Tff7b72def Td2a8ffprocess_fileTb4b4b4(Te6edf3filepathTb4b4b4, Te6edf3start_patternsTb4b4b4, Te6edf3any_patternsTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(Te6edf3filepathTb4b4b4, Ta5d6ff'Ta5d6ffrTa5d6ff'Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff'Ta5d6ffutf-8Ta5d6ff'Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3original_content Tff7b72= Te6edf3fTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Te6edf3api_ref Tff7b72= Tffa657strTb4b4b4(Te6edf3filepathTb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffmarkdown/reference.mdTa5d6ff"
Te6edf3cleaned_content Tff7b72= Te6edf3clean_markdown_contentTb4b4b4(Te6edf3original_contentTb4b4b4, Te6edf3start_patternsTb4b4b4, Te6edf3any_patternsTb4b4b4, Te6edf3api_refTff7b72=Te6edf3api_refTb4b4b4)

Tff7b72if Te6edf3cleaned_content Tff7b72!= Te6edf3original_contentTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(Te6edf3filepathTb4b4b4, Ta5d6ff'Ta5d6ffwTa5d6ff'Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff'Ta5d6ffutf-8Ta5d6ff'Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3cleaned_contentTb4b4b4)
Tff7b72return Tff7b72True
Tff7b72return Tff7b72False
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffError processing Tffd700{Te6edf3filepathTffd700}Ta5d6ff: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3fileTff7b72=Te6edf3sysTff7b72.Td2a8ffstderrTb4b4b4)
Tff7b72return Tff7b72False


Tff7b72def Td2a8fffind_markdown_filesTb4b4b4(Te6edf3directoryTb4b4b4)Tb4b4b4:
Te6edf3md_files Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3rootTb4b4b4, Te6edf3_Tb4b4b4, Te6edf3files Tff7b72in Te6edf3osTff7b72.Td2a8ffwalkTb4b4b4(Te6edf3directoryTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3filename Tff7b72in Te6edf3filesTb4b4b4:
Tff7b72if Te6edf3filenameTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff'Ta5d6ff.mdTa5d6ff'Tb4b4b4)Tb4b4b4: Te6edf3md_filesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3PathTb4b4b4(Te6edf3rootTb4b4b4) Tff7b72/ Te6edf3filenameTb4b4b4)
Tff7b72return Te6edf3md_files


Tff7b72def Td2a8ffmainTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3sysTff7b72.Td2a8ffargvTb4b4b4) Tff7b72< T79c0ff2Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffUsage: python clean_markdown.py <directory_path>Ta5d6ff"Tb4b4b4, Te6edf3fileTff7b72=Te6edf3sysTff7b72.Td2a8ffstderrTb4b4b4)
Te6edf3sysTff7b72.Td2a8ffexitTb4b4b4(T79c0ff1Tb4b4b4)
Te6edf3directory Tff7b72= Te6edf3sysTff7b72.Td2a8ffargvTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Te6edf3directoryTb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffError: Ta5d6ff'Tffd700{Te6edf3directoryTffd700}Ta5d6ff'Ta5d6ff is not a valid directoryTa5d6ff"Tb4b4b4, Te6edf3fileTff7b72=Te6edf3sysTff7b72.Td2a8ffstderrTb4b4b4)
Te6edf3sysTff7b72.Td2a8ffexitTb4b4b4(T79c0ff1Tb4b4b4)
Te6edf3start_patternsTb4b4b4, Te6edf3any_patterns Tff7b72= Te6edf3compile_patternsTb4b4b4(Tb4b4b4)
Te6edf3md_files Tff7b72= Te6edf3find_markdown_filesTb4b4b4(Te6edf3directoryTb4b4b4)
Tff7b72if Tff7b72not Te6edf3md_filesTb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffNo markdown files found in Ta5d6ff'Tffd700{Te6edf3directoryTffd700}Ta5d6ff'Ta5d6ff"Tb4b4b4)
Tff7b72return
Te6edf3modified_count Tff7b72= T79c0ff0
Tff7b72for Te6edf3filepath Tff7b72in Te6edf3md_filesTb4b4b4:
Tff7b72if Te6edf3process_fileTb4b4b4(Te6edf3filepathTb4b4b4, Te6edf3start_patternsTb4b4b4, Te6edf3any_patternsTb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCleaned: Tffd700{Te6edf3filepathTffd700}Ta5d6ff"Tb4b4b4)
Te6edf3modified_count Tff7b72+Tff7b72= T79c0ff1
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Tffea00\nTa5d6ffProcessed Tffd700{Tffa657lenTb4b4b4(Te6edf3md_filesTb4b4b4)Tffd700}Ta5d6ff file(s), modified Tffd700{Te6edf3modified_countTffd700}Ta5d6ff"Tb4b4b4)


Tff7b72if Tff7b72__name__ Tff7b72== Ta5d6ff'Ta5d6ff__main__Ta5d6ff'Tb4b4b4:
Te6edf3mainTb4b4b4(Tb4b4b4)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────